package com.ssm.basis.web.config.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

/**
 * https://blog.csdn.net/f641385712/article/details/102294670
 * 在 Controller 层统一对异常进行处理，对 springmvc 中的控制器抛出的异常进行处理
 * spring 3.2 中新增 @ControllerAdvice 可以把 @ExceptionHandler、@InitBinder、@ModelAttribute 应用到所有 @RequestMapping 中
 * 其中 @ExceptionHandler 方法的参数不能有 Map，Model 等等，一般只能传入设定的异常，否则可能会无法处理异常
 *
 * @see ResponseEntityExceptionHandler
 */
@RestControllerAdvice
class GlobalExceptionHandler {

    // @ModelAttribute(name = "subject")
    // void modelAttribute() {
    //     log.debug("会在 handleRuntimeException 之前调用");
    // }

    /**
     * 处理所有异常
     */
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public RuntimeException handleRuntimeException(RuntimeException ex, WebRequest request) {
        ex.printStackTrace();
        return ex;
    }
}
